package com.blog.cmrpersonalblog.config;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Sa-Token配置类
 */
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    /**
     * 注册Sa-Token拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册Sa-Token拦截器，校验规则为StpUtil.checkLogin()登录校验
        registry.addInterceptor(new SaInterceptor(handle -> {
            SaRouter.match("/**")    // 拦截所有路由
                    .notMatch("/auth/login")                    // 排除管理端登录接口
                    .notMatch("/auth/logout")                   // 排除管理端注销接口
                    .notMatch("/user/auth/login")               // 排除用户端登录接口
                    .notMatch("/user/auth/logout")              // 排除用户端注销接口
                    .notMatch("/user/auth/register")            // 排除用户端注册接口
                    .notMatch("/user/auth/send-verification-code") // 排除发送验证码接口
                    .notMatch("/user/auth/verify-email-code")   // 排除验证邮箱验证码接口
                    .notMatch("/user/auth/forgot-password")     // 排除忘记密码接口
                    .notMatch("/user/auth/validate-reset-token") // 排除验证重置令牌接口
                    .notMatch("/user/auth/reset-password")      // 排除重置密码接口
                    .notMatch("/home/**")                       // 排除用户端首页接口（兼容旧路径）
                    .notMatch("/api/home/**")                   // 排除用户端首页接口（新路径）
                    .notMatch("/api/articles/**")               // 排除文章相关接口
                    .notMatch("/api/comments/**")               // 排除评论相关接口
                    .notMatch("/api/user/*/profile")            // 排除查看用户信息接口
                    .notMatch("/api/user/*/articles")           // 排除查看用户文章列表接口
                    .notMatch("/api/user/*/articles/showcase")  // 排除用户文章展示接口
                    .notMatch("/api/user/*/followers")          // 排除查看用户粉丝列表接口
                    .notMatch("/api/user/*/following")          // 排除查看用户关注列表接口
//                    .notMatch("/api/comments/article/**")       // 排除文章评论查看接口
//                    .notMatch("/api/comments/**/replies")        // 排除评论回复查看接口
//                    .notMatch("/api/comments/**/stats")          // 排除评论统计查看接口
                    .notMatch("/ws/**")                         // 排除WebSocket端点（在WebSocket层面做鉴权）
                    .notMatch("/test/health")                   // 排除健康检查接口
                    .notMatch("/error")                         // 排除错误页面
                    .notMatch("/favicon.ico")                   // 排除图标
                    .notMatch("/static/**")                     // 排除静态资源
                    .notMatch("/files/**")                      // 排除文件访问路径（图片等静态文件）
                    .notMatch("/swagger-ui/**")                   // 排除Swagger相关
                    .check(r -> StpUtil.checkLogin());        // 登录校验
        })).addPathPatterns("/**");
    }
}
